package com.tim.third.demo.easyexcel;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.read.listener.ReadListener;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 阿里excel工具
 * 导包：com.alibaba#easyexcel 2.2.6
 * 官网：https://easyexcel.opensource.alibaba.com/docs/current/
 */
public class AliEasyExcelDemo {

    @Data
    static class DemoData {
        //设置excel表头名称
        @ExcelProperty(value = "学生编号",index = 0)
        private Integer sno;
        @ExcelProperty(value = "学生姓名",index = 1)
        private String sname;
    }

    public static void main(String[] args) {
        List<DemoData> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            DemoData data = new DemoData();
            data.setSno(i);
            data.setSname("lucy"+i);
            list.add(data);
        }

        //实现excel写的操作
        //1 设置写入文件夹地址和excel文件名称
        String filename = "C:\\Users\\Desktop\\write.xlsx";
        // 2 调用easyexcel里面的方法实现写操作
        // write方法两个参数：第一个参数文件路径名称，第二个参数实体类class
        EasyExcel.write(filename,DemoData.class)
                .sheet("学生列表")
                .doWrite(list);

    }

    /**
     * 读取excel方法
     *  read异步
     *  readSync同步返回
     */
    public static void read(){
        // invokeHead，解析首行表头；invoke，解析数据
        ReadListener rl=null;
        // @ExcelProperty；index、value指定对应列
        Class type=null;

        EasyExcel.read("", type, rl)
                .sheet()// 切换sheet
                .headRowNumber(1)// 表头行数
                .doRead();

    }

    /**
     *
     */
    public static void write(){
        String fileName="";

        // 写入
        EasyExcel.write(fileName, DemoData.class)
                .sheet("模板")
                .doWrite(null);

    }

    /**
     * 模板填充
     */
    public static void fill(){

        String fileName="";
        String templateFileName="";
        Object data = null;// 可为map、List
        EasyExcel.write(fileName)
                .withTemplate(templateFileName)
                .sheet()
                .doFill(data);
    }
}
